package utils;

import constants.ErrorMsg;

import java.lang.reflect.Field;

public class BeanUtils {
    /**
     * 属性拷贝   拷贝A里面的属性值  到B里面的同名同类型属性
     * @param a entity A
     * @param b entity B
     * @param <T> <T>
     */
    public <T> void copyBean(T a, T b){
        Field[] declaredFields = a.getClass().getDeclaredFields();
        for (Field declaredField : declaredFields) {
            declaredField.setAccessible(true);
            Class<?> aType = declaredField.getType(); //获取属性类型
            String aName = declaredField.getName(); //获取属性名称
            //获取b属性
            for (Field field : b.getClass().getDeclaredFields()) {
                Class<?> bType = field.getType();
                String bName = field.getName(); //获取属性名称
                field.setAccessible(true);
                //1.基础赋值,名称,类型 完全一样 ,直接赋值
                if (bType.equals(aType) && bName.equals(aName)) {
                    Object aValue;
                    try {
                        aValue = declaredField.get(a); //获取A属性值
                        field.set(b,aValue);
                    } catch (IllegalAccessException e) {
                        System.err.println(ErrorMsg.BEAN_UTILS.CP_FIELD_SET_ILLEGAL_ACCESS_EXCEPTION);
                    }
                }
            }
        }
    }
}
